package xyz.xmh.pattern.structural.filterpattern;

import java.util.List;

/**
 * OrCriteria
 * 获取符合其中任意一个标准的
 *
 * @author xuMingHai
 * @since 2021/4/30 星期五 14:26
 */
public class OrCriteria implements Criteria {

    /**
     * 标准
     */
    private final Criteria criteria;

    /**
     * 其他标准
     */
    private final Criteria otherCriteria;

    public OrCriteria(Criteria criteria, Criteria otherCriteria) {
        this.criteria = criteria;
        this.otherCriteria = otherCriteria;
    }


    /**
     * 获取符合任意一个标准的
     *
     * @param personList 人集合
     * @return 过滤后的标准
     */
    @Override
    public List<Person> meetCriteria(List<Person> personList) {
        // 第一次过滤
        List<Person> firstCriteriaPersonList = criteria.meetCriteria(personList);

        // 第二次过滤
        List<Person> otherCriteriaPersonList = otherCriteria.meetCriteria(personList);

        // 遍历集合，要是第一过滤后的集合里没有第二个集合里的元素，就添加
        // 得到的就是符合这两个标准的任意一种
        for (Person person : otherCriteriaPersonList) {

            if (!firstCriteriaPersonList.contains(person)) {
                firstCriteriaPersonList.add(person);
            }
        }

        return firstCriteriaPersonList;
    }


}
